Excel VBA四种循环的用法和区别(For...next,For each ...next,Do...loop,While...wend)

您所在的位置:网站首页 do while 和for Excel VBA四种循环的用法和区别(For...next,For each ...next,Do...loop,While...wend)

Excel VBA四种循环的用法和区别(For...next,For each ...next,Do...loop,While...wend)

2024-03-19 14:21| 来源: 网络整理| 查看: 265

在Excel VBA中需要用循环去遍历某些参数时,就会考虑到VBA中常见的四种循环方法:For…next, For each …next, Do…loop,While…wend。一般情况下,四种方法是等效的,可以互相替换使用,但是在使用的便利性上,上述方法各有优势。

接下来逐个解析四种方法的特点。

1>For…next 先看一下它的用法:

For 计数器 = Start to End [ 步长 ] [ statements ] [ Exit for ] [ statements ] Next [ 计数器 ]

For…Next 语句的语法包含以下部分:

计数器 必填。 用作循环计数器的数值变量。 该变量不能是布尔值或数组元素。 start 必填。 counter 的初始值。 end 必填。 counter 的最终值。 步长 可选。 counter 每次通过循环时更改的量。 如果不指定,step 默认为 1。 statements 可选。 For 和 Next 之间执行指定次数的一个或多个语句。

解释一下上述用法,开始指的是循环开始的值,结束指的是循环结束的值,实质上就是计数器值的一个值域,如果计数器的值在值域内,就执行循环语句,计数器每运行到Next,就增加一个步长(不指定默认为1),可以为负数。 我们先来看一些实例。

Case1:计算1+2+3+…+98+99+100的和。

Sub Sumdemo1() Dim num%, I% '定义数据类型 num = 0 I = 1 For I = 1 To 100 'I是计数器,值域是1到100,默认步长是1 num = num + I '求和 Next I 'I这步可省略,经过一次步长+1 MsgBox num '对话框显示求和结果 End Sub

运行上述代码,可以得到如下图所示的结果。 求和结果 上述代码是一个比较经典的循环的例子,利用步长的变化求和,延伸至可以等差求和。 接下来看另一个经典的例子。

Case2:在Excel里生成九九乘法表。

Sub testdemo2() Dim num1%, num2% '定义变量类型 For num1 = 1 To 9 For num2 = 1 To 9 If num2 > num1 Then '九九乘法表是左下三角形,必须行>列 Exit For Else Cells(num1, num2) = num2 & "x" & num1 & "=" & num1 * num2 '将字符和数值写入单元格 End If Next num2 Next num1 End Sub

运行上述代码,可以得到如下图所示的结果。 九九乘法表 上述代码进行了嵌套循环,从而进行二维方向的遍历,在实际的使用中,嵌套循环使用的几率比较高,"九九乘法表"这个例子值得学习和理解。

结合For…next的用法和两个例子,可以发现它适用于已知范围数字循环,这种循环是以一定的次数来执行语句的。

2>For each … next 同理,先看一下它的用法:

For each Element in Collection [statements] [ Exit for ] [ statements ] Next Element

Element 必填。 用作循环计数器的数值变量。 Collection 必填。一组变量的集合或者数组。 statements 可选。 For each和 Next 之间执行指定次数的一个或多个语句。

在使用这个方法时,由于循环里面有Each Element的存在,因此需要锚定一个范围或者组群Collection,即对象,并用一个变量去表示它,通过next逐步遍历里面的元素。接下来看一下实例。

Case3:显示当前工作簿的所有工作表的名称。

Sub testdemo1() Dim ws As Worksheet '定义变量类型 For Each ws In Worksheets '遍历工作表 MsgBox ws.Name '显示当前的工作表名称 Next ws End Sub

运行上述代码,可以得到如下图所示的结果。 遍历工作簿的工作表名称

由于当前的工作簿只有一张工作表,因此循环进行了一次就结束了。上述例子中,ws就是已知类型的变量,表示Each Element,去遍历Collection即worksheets,并将工作表的名称显示出来。

Case4:计算表格所示8位业务员的提成金额。

计算提成金额

Sub testdemo2() Dim rng As Range '定义变量类型 For Each rng In Range("b2:b9") '遍历range("b2:b9"),多个工作表应指明具体worksheet rng.Offset(0, 1) = rng.Value * 0.1 '计算结果放在变量的右侧一列c列 Next rng End Sub

运行上述代码结果如下:

提成结果

Case4的代码中rng,range(“b2:b9”)分别代表Each Element和Collection,遍历一次就计算当前变量的提成。

结合For each…next的用法和案例,可以发现这种循环主要针对集合或数组进行操作,让所用元素执行一次循环语句。

3>Do…loop 同理,先看一下它的用法:

Do while Condition [statements] [exit do] [statements] Loop

Condition 必填。 计算结果为“True”或“False”的数值表达式或字符串表达式。 如果条件 为 Null,则条件 被视为 False。 statements 可选。 Do 和 Loop 之间执行指定次数的一个或多个语句。

在执行这个循环语句时,首先先判断条件,如果是True,即满足condition的条件,就执行后面的statement代码,执行循环,直到循环结束,否则跳出循环,执行loop后的代码,所以想要实现遍历的目的,条件设置非常重要(避免进入死循环)。

Case5:计算1+2+3+…+98+99+100的和。

Sub testdemo_1() Dim num%,I% '定义变量类型 num = 0: I = 1 Do while I


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3